| Conditions | 1 |
| Paths | 1 |
| Total Lines | 140 |
| Code Lines | 85 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | /*! |
||
| 26 | }(function () { |
||
| 27 | function extend () { |
||
| 28 | var i = 0; |
||
| 29 | var result = {}; |
||
| 30 | for (; i < arguments.length; i++) { |
||
| 31 | var attributes = arguments[ i ]; |
||
| 32 | for (var key in attributes) { |
||
| 33 | result[key] = attributes[key]; |
||
| 34 | } |
||
| 35 | } |
||
| 36 | return result; |
||
| 37 | } |
||
| 38 | |||
| 39 | function init (converter) { |
||
| 40 | function api (key, value, attributes) { |
||
| 41 | var result; |
||
| 42 | if (typeof document === 'undefined') { |
||
| 43 | return; |
||
| 44 | } |
||
| 45 | |||
| 46 | // Write |
||
| 47 | |||
| 48 | if (arguments.length > 1) { |
||
| 49 | attributes = extend({ |
||
| 50 | path: '/' |
||
| 51 | }, api.defaults, attributes); |
||
| 52 | |||
| 53 | if (typeof attributes.expires === 'number') { |
||
| 54 | var expires = new Date(); |
||
| 55 | expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); |
||
| 56 | attributes.expires = expires; |
||
| 57 | } |
||
| 58 | |||
| 59 | // We're using "expires" because "max-age" is not supported by IE |
||
| 60 | attributes.expires = attributes.expires ? attributes.expires.toUTCString() : ''; |
||
| 61 | |||
| 62 | try { |
||
| 63 | result = JSON.stringify(value); |
||
| 64 | if (/^[\{\[]/.test(result)) { |
||
| 65 | value = result; |
||
| 66 | } |
||
| 67 | } catch (e) {} |
||
| 68 | |||
| 69 | if (!converter.write) { |
||
| 70 | value = encodeURIComponent(String(value)) |
||
| 71 | .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); |
||
| 72 | } else { |
||
| 73 | value = converter.write(value, key); |
||
| 74 | } |
||
| 75 | |||
| 76 | key = encodeURIComponent(String(key)); |
||
| 77 | key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); |
||
| 78 | key = key.replace(/[\(\)]/g, escape); |
||
| 79 | |||
| 80 | var stringifiedAttributes = ''; |
||
| 81 | |||
| 82 | for (var attributeName in attributes) { |
||
| 83 | if (!attributes[attributeName]) { |
||
| 84 | continue; |
||
| 85 | } |
||
| 86 | stringifiedAttributes += '; ' + attributeName; |
||
| 87 | if (attributes[attributeName] === true) { |
||
| 88 | continue; |
||
| 89 | } |
||
| 90 | stringifiedAttributes += '=' + attributes[attributeName]; |
||
| 91 | } |
||
| 92 | return (document.cookie = key + '=' + value + stringifiedAttributes); |
||
| 93 | } |
||
| 94 | |||
| 95 | // Read |
||
| 96 | |||
| 97 | if (!key) { |
||
| 98 | result = {}; |
||
| 99 | } |
||
| 100 | |||
| 101 | // To prevent the for loop in the first place assign an empty array |
||
| 102 | // in case there are no cookies at all. Also prevents odd result when |
||
| 103 | // calling "get()" |
||
| 104 | var cookies = document.cookie ? document.cookie.split('; ') : []; |
||
| 105 | var rdecode = /(%[0-9A-Z]{2})+/g; |
||
| 106 | var i = 0; |
||
| 107 | |||
| 108 | for (; i < cookies.length; i++) { |
||
| 109 | var parts = cookies[i].split('='); |
||
| 110 | var cookie = parts.slice(1).join('='); |
||
| 111 | |||
| 112 | if (cookie.charAt(0) === '"') { |
||
| 113 | cookie = cookie.slice(1, -1); |
||
| 114 | } |
||
| 115 | |||
| 116 | try { |
||
| 117 | var name = parts[0].replace(rdecode, decodeURIComponent); |
||
| 118 | cookie = converter.read ? |
||
| 119 | converter.read(cookie, name) : converter(cookie, name) || |
||
| 120 | cookie.replace(rdecode, decodeURIComponent); |
||
| 121 | |||
| 122 | if (this.json) { |
||
| 123 | try { |
||
| 124 | cookie = JSON.parse(cookie); |
||
| 125 | } catch (e) {} |
||
| 126 | } |
||
| 127 | |||
| 128 | if (key === name) { |
||
| 129 | result = cookie; |
||
| 130 | break; |
||
| 131 | } |
||
| 132 | |||
| 133 | if (!key) { |
||
| 134 | result[name] = cookie; |
||
| 135 | } |
||
| 136 | } catch (e) {} |
||
| 137 | } |
||
| 138 | |||
| 139 | return result; |
||
| 140 | } |
||
| 141 | |||
| 142 | api.set = api; |
||
| 143 | api.get = function (key) { |
||
| 144 | return api.call(api, key); |
||
| 145 | }; |
||
| 146 | api.getJSON = function () { |
||
| 147 | return api.apply({ |
||
| 148 | json: true |
||
| 149 | }, [].slice.call(arguments)); |
||
| 150 | }; |
||
| 151 | api.defaults = {}; |
||
| 152 | |||
| 153 | api.remove = function (key, attributes) { |
||
| 154 | api(key, '', extend(attributes, { |
||
| 155 | expires: -1 |
||
| 156 | })); |
||
| 157 | }; |
||
| 158 | |||
| 159 | api.withConverter = init; |
||
| 160 | |||
| 161 | return api; |
||
| 162 | } |
||
| 163 | |||
| 164 | return init(function () {}); |
||
| 165 | })); |
||
| 166 |
This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.
To learn more about declaring variables in Javascript, see the MDN.